import multiprocessing
import os

def copy_file(q,old_dir,new_dir,file_name):
    # 读取文件内容
    read_f = open(old_dir+'/'+file_name,'rb')
    file_content = read_f.read()
    read_f.close()
    # 写文件内容
    write_f = open(new_dir+'/'+file_name,"wb")
    write_f.write(file_content)
    write_f.close()
    q.put(file_name) # 每复制一个文件就向队列中添加一条数据

def main():
    # 获取用户输入的文件夹路径
    old_dir = input("请输入要复制的文件夹路径：")
    # 获取该路径下所有的文件
    file_names = os.listdir(old_dir)
    # 创建一个新文件夹用于存储需要复制的文件
    new_dir = ("./copy")
    try:
        os.mkdir(new_dir)
    except:
        pass
    # 创建进程池，利用多个进程复制文件
    po = multiprocessing.Pool(5)
    # 创建队列，利用队列进行复制的 进度条实现
    queue = multiprocessing.Manager().Queue()
    for file_name in file_names:
        po.apply_async(copy_file,(queue,old_dir,new_dir,file_name))

    # 关闭进程
    po.close()
    #po.join()
    all_file_len = len(file_names)
    compulte_count = 0
    while True:
        compulte_file = queue.get()
        compulte_count += 1
        # print("已完成复制的文件 %s " % compulte_file)
        print("\r当前复制的进度： %.2f%%" % (compulte_count * 100 / all_file_len),end="")
        if compulte_count == all_file_len:
            break

if __name__ == "__main__":
    main()